package indi.juzhuohan.chatroom.client;

import java.net.Socket;
import java.util.List;

import javax.swing.JOptionPane;

import indi.juzhuohan.chatroom.entity.ChatStatus;
import indi.juzhuohan.chatroom.entity.FontStyle;
import indi.juzhuohan.chatroom.entity.TransferInfo;
import indi.juzhuohan.chatroom.io.IOStream;
import indi.juzhuohan.chatroom.util.FontSupport;

/**
 * 客户端长链接拿消息线程
 * @author 鞠卓瀚
 */
public class ClientHandler extends Thread {
	
	Socket socket;
	//登录窗体
	Loginframe loginFrame;
	//聊天主窗体
	Chatframe chatFrame;
	
	public ClientHandler(Socket socket , Loginframe loginFrame) {
		this.socket = socket;
		this.loginFrame = loginFrame;
	}
	/**
	 * 重复拿消息
	 */
	@Override
	public void run() {
		while (true) {
			try {
//				获取socket消息，产生阻塞
				Object obj = IOStream.readMessage(socket);
//				消息分类
				if (obj instanceof TransferInfo) {
//					数据类型转换
					TransferInfo tfi = (TransferInfo)obj;
					if (tfi.getStatusEnum() == ChatStatus.LOGIN) {
//						登录消息
						loginResult(tfi);
					} else if(tfi.getStatusEnum() == ChatStatus.CHAT){
//						聊天消息
						chatResult(tfi);
					} else if(tfi.getStatusEnum() == ChatStatus.NOTICE){
//						系统消息
						noticeResult(tfi);
					} else if(tfi.getStatusEnum() == ChatStatus.ULIST){
//						登录列表消息
						onlineUsersResult(tfi);
					} else if(tfi.getStatusEnum() == ChatStatus.DD){
//						抖动消息
						jitterResult(tfi);
					}
				}
				Thread.sleep(1000);
			} catch (InterruptedException e) {
				System.out.println("clientHandler1");
			}
		}
	}
	
	/**
	 * 登录结果的处理
	 * @param tfi
	 */
	public void loginResult(TransferInfo tfi) {
		if(tfi.getLoginSucceessFlag()) {
//			根据实体类取出用户名
			String userName = tfi.getUserName();
//			登录成功，打开主界面
			chatFrame= new Chatframe(userName , socket);
//			关闭登录窗体
			loginFrame.dispose();
		}else {
//			登录失败
			JOptionPane.showMessageDialog(loginFrame, "账号密码错误", "登陆失败",JOptionPane.WARNING_MESSAGE);
		}
	}

	/**
	 * 聊天信息处理
	 * @param tfi
	 */
	public void chatResult(TransferInfo tfi) {
		String sender = tfi.getSender();
		String reciver = tfi.getReciver();
		List<FontStyle> contents = tfi.getContent();
		FontSupport.fontDecode(chatFrame.acceptPane, contents, sender, reciver);
	}
	
	/**
	 * 系统消息提示
	 * @param tfi
	 */
	public void noticeResult(TransferInfo tfi) {
		//往公屏上面投射系统消息
		FontSupport.contentAppend(chatFrame.acceptPane,"\n" + tfi.getNotice());
	}
	/**
	 * 刷新当前用户的列表
	 * @param tfi
	 */
	public void onlineUsersResult(TransferInfo tfi) {
		String[] userOnlineArray = tfi.getUserOnlineArray();
		chatFrame.lstUser.setListData(userOnlineArray);
	}
	/**
	 * 接受抖动信息
	 * @param tfi
	 */
	public void jitterResult(TransferInfo tfi) {
		Jitter jitter = new Jitter(chatFrame);
		jitter.start();
	}
}
